package io.gitee.hchaojie.day08.thread;

// 共享的数据
public class Counter {
    private int count = 0;

    private Object lock = new Object();

    // synchronized给方法加锁，同时只能由一个线程执行方法里面的代码
    // 其它线程调用此方法时，会被**阻塞**
//    public synchronized void increase() {
//        this.count++;       // 不是原子性的操作，底下实际上有多个步骤
//    }

    public void increase() {
        //synchronized (this) {       // 使用当前对象作为同步锁
        synchronized (lock) {       // 使用自定义的锁（java里面任何对象都可以作为锁）
            this.count++;       // 不是原子性的操作，底下实际上有多个步骤
        }
    }

    public int getCount() {
        return this.count;
    }

    // 对于静态的同步方法，会用当前类的字节码对象作为锁
    public synchronized static void foo() {
        System.out.println(Counter.class);      // Counter.class，字节码对象
    }

    public static void main(String[] args) {
        System.out.println(Counter.class);
    }
}
